###fixture的执行顺序影响因素-dependencies

'''
影响因素有三：

scope，就是fixture函数的作用范围，比如scope='class'。
dependencies，可能会存在fixture请求了别的fixture，所以产生了依赖关系，也要考虑进去。
autouse，如果autouse=True，那么在作用范围内，这个fixture是最先调用的。

所以，像fixture函数或测试函数的名称、定义的位置、定义的顺序以及请求fixture的顺序，除了巧合之外，对执行顺序没有任何影响。
'''

###2）dependencies：fixturea请求fixtureb，需要用b返回的结果。那么b先执行，因为a依赖于b，必须得让b先执行，否则a就没法干活。
### 另外，即使a不需要用b返回的结果，只要a需要确保在b之后执行，a仍然可以通过请求b来控制顺序。

import pytest


@pytest.fixture
def order():
    return []


@pytest.fixture
def a(order):
    order.append("a")


@pytest.fixture
def b(a, order):
    order.append("b")


@pytest.fixture
def c(a, b, order):
    order.append("c")


@pytest.fixture
def d(c, b, order):
    order.append("d")


@pytest.fixture
def e(d, b, order):
    order.append("e")


@pytest.fixture
def f(e, order):
    order.append("f")


@pytest.fixture
def g(f, c, order):
    order.append("g")


def test_order(g, order):
    assert order == ["a", "b", "c", "d", "e", "f", "g"]